﻿using System;
using System.Collections.Generic;
using System.Text;

namespace LeetcodeTest._100._20
{
    public class Leetcode12
    {
        public void Test()
        {
            try
            {
               string a = IntToRoman(9);
            }
            catch (Exception ex)
            { }
        }

        /*
         12. Integer to Roman

        Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.
         */

        /*
         罗马数字是阿拉伯数字传入之前使用的一种数码。罗马数字采用七个罗马字母作数字、即Ⅰ（1）、X（10）、C（100）、M（1000）、V（5）、L（50）、D（500）。记数的方法：

相同的数字连写，所表示的数等于这些数字相加得到的数，如 Ⅲ=3；
小的数字在大的数字的右边，所表示的数等于这些数字相加得到的数，如 Ⅷ=8、Ⅻ=12；
小的数字（限于 Ⅰ、X 和 C）在大的数字的左边，所表示的数等于大数减小数得到的数，如 Ⅳ=4、Ⅸ=9；
在一个数的上面画一条横线，表示这个数增值 1,000 倍，如

=5000。
         */
        public string IntToRoman(int num)
        {
            //只能说业务不熟，不好办
            string strResult = "";

            strResult = ConvetToRoman(strResult, 1000, "M", ref num);
            strResult = ConvetToRoman(strResult, 900, "CM", ref num);

            strResult = ConvetToRoman(strResult, 500, "D", ref num);
            strResult = ConvetToRoman(strResult, 400, "CD", ref num);


            strResult = ConvetToRoman(strResult, 100, "C", ref num);
            strResult = ConvetToRoman(strResult, 90, "XC", ref num);

            strResult = ConvetToRoman(strResult, 50, "L", ref num);
            strResult = ConvetToRoman(strResult, 40, "XL", ref num);

            strResult = ConvetToRoman(strResult, 10, "X", ref num);
            if (num == 9)
                return strResult + "IX";

            strResult = ConvetToRoman(strResult, 5, "V", ref num);
            if (num == 4)
                return strResult + "IV";

            for (int i = 0; i < num; i++)
            {
                strResult += "I";
            }

            return strResult;
        }

        private string ConvetToRoman(string strResult,int arabicNum, string romanSign, ref int num)
        {
            int temp = num / arabicNum;
            for (int i = 0; i < temp; i++)
            {
                strResult += romanSign;
            }
            num = num % arabicNum;
            return strResult;
        }
    }
}
